

lst = [10, 28, 35, 66, 78, 89, 92, 95]
# 查找78在这个列表中的位置，如果该数不存在返回-1

# 使用系统自带方式查找
def find(lst, target):
    if target in lst:
        return lst.index(101)
    else:
        return -1
# 普通方式查找
def find_1(lst, target):
    for i in range(len(lst)):
        if lst[i] == target:
            return i
    else:
        return -1
    print(find(lst, 101))
    
    
def find_2(lst, target, l, r):
    """
    二分查找
    :param lst:  列表
    :param target:  目标值
    :param l:  最左索引
    :param r:  最右索引
    :return:
    """
    if r < l:
        return -1
    else:
        # 取中间索引
        mid = (r+l)//2
        # 判断目标值是否相等，相等则返回对应的索引
        if target == lst[mid] :
            return mid
        # 判断目标值是否小于中间值， 如果小于则在右侧位置更改为中间值-1
        elif target < lst[mid]:
            return find_2(lst, target, l, mid-1)
        # 判断目标值是否大于中间值， 如果大于则在左侧位置更改为中间值+1
        else:
            return find_2(lst, target, mid+1, r)


print(find_2(lst, 10, 0, len(lst)-1))
    
    
